package com.ys.service.sys.impl;

import java.util.UUID;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ys.entity.sys.SysAdmin;
import com.ys.entity.sys.SysAdminlog;
import com.ys.entity.sys.SysImgcode;
import com.ys.mapper.sys.SysAdminMapper;
import com.ys.mapper.sys.SysAdminlogMapper;
import com.ys.mapper.sys.SysMapper;
import com.ys.service.sys.SysAdminService;
import com.ys.util.AESUtil;
import com.ys.util.ReqUtil;
import com.ys.vo.R;


@Service("sysAdminService")
public class SysAdminServiceImpl implements SysAdminService {
	@Autowired
	private SysAdminMapper sysAdminMapper;
	@Autowired
	private SysAdminlogMapper sysAdminlogMapper;
    @Autowired
    private SysMapper sysMapper;
    
    public static void main(String[] args) {
		System.out.println(AESUtil.aesEncrypt("aaa111"));
	}
    
    @Override
    public R login(
    		HttpServletRequest request,
    		HttpServletResponse response,
    		String loginName,
    		String pass,
			String code
    		) {
		
		// 验证登录名
		if (loginName == null || loginName.length() == 0) {
			return R.error("登录名不能为空");
		}
		
		// 验证密码
		if (pass == null || pass.length() == 0) {
			return R.error("密码不能为空");
		}
		
		String ip = ReqUtil.getIpAddr(request);
		
		// 验证图形验证码
		if (code == null || code.length() == 0) {
			return R.error("图形验证码不能为空");
		}

		// 验证图形验证码
		SysImgcode imgcode = new SysImgcode().setIp(ip).queryFirst();
		if (imgcode == null) {
			return R.error("请刷新重试");
		}
		if (!code.equals(imgcode.getCode())) {
			sysMapper.deleteImgcodeByIp(ip);
			return R.error("图形验证码有误");
		}
    	
        SysAdmin sysAdmin = new SysAdmin().setLoginName(loginName).queryFirst();
        if (sysAdmin == null) {
            return R.error("账号不存在");
        }
        if (!AESUtil.aesEncrypt(pass).equals(sysAdmin.getLoginPass())) {
            return R.error("密码不正确");
        }
        
        String token = UUID.randomUUID().toString();
        sysAdmin.setToken(token);
        sysAdminMapper.update(sysAdmin);

        Long adminId = sysAdmin.getId();
        Long sysRoleId = sysAdmin.getRoleId();
        String value = token + "_" + sysRoleId + "_" + adminId;
        Cookie cookie = new Cookie(ReqUtil.ADMIN_TOKEN, value);
        cookie.setMaxAge(2 * 24 * 60 * 60);
        response.addCookie(cookie);
        
        // 删除图形验证码
        sysMapper.deleteImgcodeByIp(ip);

        SysAdminlog adminlog = SysAdminlog.sysAdminlog(ip, "登录", adminId, 1);
        sysAdminlogMapper.insert(adminlog);
        
        return R.ok();
    }
//	
//	@Override
//	@Transactional
//    public R updPwd(
//    		Long adminId,
//    		String oldPass,
//    		String newPass,
//    		String rNewPass
//    		) throws Exception {
//		
//		Admin admin = new Admin().setId(adminId).addField("A.pass as pass").queryFirst();
//		
//		// 含有数字
//	    String rNumber = ".*[0-9].*";
//
//	    // 包含字母
//	    String rEnglish = ".*[a-zA-z].*";
//	    
//	    // 验证新密码
//	    if (newPass == null || newPass.length() == 0) {
//			return R.error("新密码不能为空");
//		} else if (rNewPass == null || rNewPass.length() == 0) {
//			return R.error("新确认密码不能为空");
//		} else if(!newPass.matches(rNumber) || !newPass.matches(rEnglish) || newPass.length() < 8 || newPass.length() > 12){//判断密码输入的是否符合要求   长度8位以上，必须包含英文和数字组合
//			return R.error("新密码不符合要求");
//		} else if(!newPass.equals(rNewPass)){//判断确认密码和新密码是否相同
//			return R.error("确认密码和新密码不一致");
//		}
//	    // 验证旧密码
//		if (oldPass == null || oldPass.length() == 0) {
//			return R.error("旧密码不能为空");
//		} else if (!oldPass.equals(admin.getPass())) {
//			return R.error("旧密码有误");
//		} else if(oldPass.equals(newPass)){
//			return R.error("新密码和旧密码不能相同");
//		}
//		
//		try {
//			if (adminMapper.update(admin.setPass(newPass)) != 1) {
//				throw new RuntimeException("失败");
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	 
//        return R.ok();
//    }
}
